package Dao;

import Modelo.Informacao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Roger
 */
public class InformacaoDAO {
    public Boolean Cadastrar(Informacao obj) {

        Boolean retorno = false;

        String sql = "INSERT INTO informacoes( nome,descricao, preco, precoBF,codmarca ,imagemF, imagemL, destaque) VALUES (?,?,?,?,?,?,?,?)";
        PreparedStatement pst = Conexao.getPreparedStatement(sql);

        try {
            pst.setString(1, obj.getNome());
            pst.setString(2, obj.getDescricao());
            pst.setDouble(3, obj.getPreco());
            pst.setDouble(4, obj.getPrecoBF());
            pst.setInt(5, obj.getCodmarca());
            pst.setBytes(6, obj.getImagemF());
            pst.setBytes(7, obj.getImagemL());
            pst.setBoolean(8, obj.getDestaque());
            

            Integer resultado = pst.executeUpdate();
            if (resultado > 0) {
                retorno = true;
            } else {
                retorno = false;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao acessar o banco");
            return false;
        }
        return retorno;
    }
    public Boolean Alterar(Informacao obj) {

        Boolean retorno = false;

        String sql = "UPDATE informacoes "
                + "   SET  nome=?, descricao=?, preco=?, precobf=?, codmarca=?, imagemf=?, imageml=?, destaque=? "
                + "   WHERE codpro=?";
        PreparedStatement pst = Conexao.getPreparedStatement(sql);

        try {
             pst.setString(1, obj.getNome());
            pst.setString(2, obj.getDescricao());
            pst.setDouble(3, obj.getPreco());
            pst.setDouble(4, obj.getPrecoBF());
            pst.setInt(5, obj.getCodmarca());
            pst.setBytes(6, obj.getImagemF());
            pst.setBytes(7, obj.getImagemL());
            pst.setBoolean(8, obj.getDestaque());
            
            Integer resultado = pst.executeUpdate();
            if (resultado > 0) {
                retorno = true;
            } else {
                retorno = false;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao acessar o banco");
            return false;
        }
        return retorno;
    }
    public List<Informacao> Listar() {
        List<Informacao> lista = new ArrayList<Informacao>();
        String sql = "SELECT * FROM informacoes";
           PreparedStatement psm = Conexao.getPreparedStatement(sql);
           try {
               ResultSet resultado = psm.executeQuery();
               
               while(resultado.next()) {
                   Informacao obj = new Informacao();
                   obj.setCodigo(resultado.getInt("codpro"));
                   obj.setNome(resultado.getString("nome"));
                   obj.setDescricao(resultado.getString("descricao"));
                   obj.setCodmarca(resultado.getInt("codmarca"));
                   obj.setPreco(resultado.getDouble("preco"));
                   obj.setPrecoBF(resultado.getDouble("precobf"));
                   obj.setImagemF(resultado.getBytes("imagemf"));
                   obj.setImagemL(resultado.getBytes("imageml"));
                   obj.setDestaque(resultado.getBoolean("destaque"));
                   lista.add(obj);
               }
               
           } catch(SQLException ex) {
               lista = null;
           }
           
        return lista;
    }
      public List<Informacao> Listar(String filtro) {
        List<Informacao> lista = new ArrayList<Informacao>();
        String sql = "SELECT * FROM informcoes where nome ILIKE ?";
           PreparedStatement psm = Conexao.getPreparedStatement(sql);
           try {
               psm.setString(1, "%"+filtro+'%');
               ResultSet resultado = psm.executeQuery();
               
               while(resultado.next()) {
                   Informacao obj = new Informacao();
                   obj.setCodigo(resultado.getInt("codpro"));
                   obj.setNome(resultado.getString("nome"));
                   obj.setDescricao(resultado.getString("descricao"));
                   obj.setCodmarca(resultado.getInt("codmarca"));
                   obj.setPreco(resultado.getDouble("preco"));
                   obj.setPrecoBF(resultado.getDouble("precobf"));
                   obj.setImagemF(resultado.getBytes("imagemf"));
                   obj.setImagemL(resultado.getBytes("imageml"));
                   obj.setDestaque(resultado.getBoolean("destaque"));
                   
                   lista.add(obj);
               }
               
           } catch(SQLException ex) {
               lista = null;
           }
           
        return lista;
    }
    
    public Boolean Excluir(Informacao obj)
    {
        Boolean retorno = false;
        //MONTA A STRING DE EXCLUSÃO a partir da chave primária
        String sql = "DELETE FROM informacoes WHERE codpro=?";
        PreparedStatement psm = Conexao.getPreparedStatement(sql);
        try {
            //PASSA A CHAVE PRIMÁRIA AO PARÂMETRO
            psm.setInt(1, obj.getCodigo());
            //EXECUTA A CONSULTA
            Integer resultado = psm.executeUpdate();
            if(resultado>0)
            {
                retorno = true; 
            }
            else
            {
                retorno = false;
            }
        } catch (SQLException ex) {
             System.out.println("BD: " + ex.getMessage());
        }
        return retorno;
    }
}
